package com.lcf.app.redis.service;

import com.alibaba.fastjson.JSON;
import com.lcf.app.redis.model.CacheConstant;
import com.lcf.app.redis.model.User;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.CachePut;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;

/**
 * @author ChenFei
 * @date 2021/10/29
 */
@Slf4j
@Service
@CacheConfig(cacheNames = CacheConstant.USER_CACHE)
public class UserService {

    /**
     * 功能描述：
     * <p>
     * unless = true 不缓存，
     * <p>
     * key：缓存key值,和cacheNames或者value组成key
     * <p>
     * condition = true 缓存，
     * <p>
     * cacheManager:指定缓存管理器
     * <p>
     * sync：是否使用异步模式。默认是方法执行完，以同步的方式将方法返回的结果存在缓存中。
     */
    @Cacheable(key = "#userId", unless = "#result == null")
    public User getUser(String userId) {
        User chenFei = new User().setId(userId).setAge(18).setName("ChenFei").setBirthday(LocalDateTime.now());
        log.info("获取User数据：{}", JSON.toJSONString(chenFei));
        return chenFei;
    }

    /**
     * 功能描述：默认先调用方法，在删除缓存 -----》删除缓存
     */
    @CacheEvict(key = "#userId")
    public void remove(String userId) {

    }

    /**
     * 功能描述：更新缓存
     */
    @CachePut(key = "#user.id")
    public User updateUser(User user) {
        return user;
    }

}
